package com.threefivework.mymall.wechat.request;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.threefivework.mymall.annotation.Required;
import com.threefivework.mymall.model.domain.CDATAConvert;
import com.threefivework.mymall.wechat.common.BaseDTO;
import lombok.Data;

/**
 * descripiton: 统一支付请求参数
 * <xml>
 * <appid>wx2421b1c4370ec43b</appid>
 * <attach>支付测试</attach>
 * <body>JSAPI支付测试</body>
 * <mch_id>10000100</mch_id>
 * <detail><![CDATA[{ "goods_detail":[ { "goods_id":"iphone6s_16G", "wxpay_goods_id":"1001", "goods_name":"iPhone6s 16G", "quantity":1, "price":528800, "goods_category":"123456", "body":"苹果手机" }, { "goods_id":"iphone6s_32G", "wxpay_goods_id":"1002", "goods_name":"iPhone6s 32G", "quantity":1, "price":608800, "goods_category":"123789", "body":"苹果手机" } ] }]]></detail>
 * <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
 * <notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
 * <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
 * <out_trade_no>1415659990</out_trade_no>
 * <spbill_create_ip>14.23.150.211</spbill_create_ip>
 * <total_fee>1</total_fee>
 * <trade_type>JSAPI</trade_type>
 * <sign>0CB01533B8C1EF103065174F50BCA001</sign>
 * </xml>
 *
 * @author: kinson(2219945910@qq.com)
 * @date: 2018/6/25
 * @time: 23:55
 * @modifier:
 * @since:
 */
@Data
@XStreamAlias("xml")
public class UnifiedOrderRequest extends BaseDTO {

    @XStreamAlias("key")
    private String key;

    /**
     * 接口链接网关
     */
    @XStreamAlias("gateway_url")
    private String gatewayUrl;

    /**
     * 设备号
     */
    @XStreamAlias("device_info")
    private String deviceInfo;

    /**
     * 签名类型
     */
    @XStreamAlias("sign_type")
    private String signType;

    /**
     * 商品描述
     */
    @Required
    @XStreamAlias("body")
    private String itemDesc;

    /**
     * 商品详情
     */
    @XStreamAlias("detail")
    @XStreamConverter(CDATAConvert.class)
    private String itemDetail;

    /**
     * 附加数据
     */
    @XStreamAlias("attach")
    private String attach;

    /**
     * 商城订单号
     */
    @Required
    @XStreamAlias("out_trade_no")
    private String outTradeNo;

    /**
     * 币种
     */
    @XStreamAlias("fee_type")
    private String feeType;

    /**
     * 交易金额（为分）例如12.53 应该（12.53*100） 放入当前值
     */
    @Required
    @XStreamAlias("total_fee")
    private int totalFee;

    /**
     * 客户IP
     * todo 需校验客户创建ip与客户ip是否一致
     */
    @Required
    @XStreamAlias("spbill_create_ip")
    private String spbillCreateIp;

    /**
     * 交易起始时间yyyyMMddHHmmss
     */
    @XStreamAlias("time_start")
    private String timeStart;

    /**
     * 交易结束时间
     */
    @XStreamAlias("time_expire")
    private String timeExpire;

    /**
     * 这个字段空着即可（订单优惠标记）
     */
    @XStreamAlias("goods_tag")
    private String goodsTag;

    /**
     * 微信回调接口（重要）
     */
    @Required
    @XStreamAlias("notify_url")
    private String notifyUrl;

    /**
     * 支付交易类型
     */
    @Required
    @XStreamAlias("trade_type")
    private String tradeType;

    /**
     * 支付订单号
     */
    @XStreamAlias("product_id")
    private String productId;

    /**
     * 指定支付方式是否限定用户用户信用卡 (这个可以空着)
     */
    @XStreamAlias("limit_pay")
    private String limitPay;

    /**
     * 用户标识 todo 支付过程中如何获取到
     * 扫描支付不需要可以空着
     */
    @XStreamAlias("openid")
    private String openid;

    /**
     * 场景信息（可以空着）
     */
    @XStreamAlias("scene_info")
    private String sceneInfo;

}
